<?php

namespace App\Console\Commands;


use App\Models\News;
use App\Models\NewsDesc;
use App\Models\SiteInfo;
use App\Models\SiteTag;
use App\Service\Translate;
use Illuminate\Console\Command;
use App\Service\Dir;


class TranslateCommand extends Command
{
    //  翻译（可以重复执行）
    // sudo -u www php artisan command:translate
    //  sudo -u www php /www/wwwroot/slh/laravel.test/artisan command:translate
    //  sudo -u www php /www/wwwroot/shenlanhui/laravel/artisan command:translate


    protected $signature   = 'command:translate';
    protected $description = '翻译数据库中没有翻译的数据';

    public function __construct()
    {
        parent::__construct();
    }

    // 执行的命令
    public function handle()
    {

        $length    = 10;
        $translate = new Translate();

        // 翻译标签
        $tagDb = new SiteTag();
        for($ii = 0; $ii <= 1000000;){
            $this->info('翻译标签：第'.$ii.'条开始，翻译'.$length.'条');
            $ii = $this->updateTranslate($translate, $tagDb, $ii, $length, 'title');
            if($ii === false){
                break;
            }
        }

        // 翻译站点信息
        /*$infoDb = new SiteInfo();
        for($ii = 0; $ii <= 1000000;){
            $this->info('翻译站点信息：第'.$ii.'条开始，翻译'.$length.'条');
            $ii = $this->updateTranslate($translate, $infoDb, $ii, $length, 'content');
            if($ii === false){
                break;
            }
        }*/

        // 翻译文章详情
        /*$descDb = new NewsDesc();
        for($ii = 0; $ii <= 1000000;){
            $this->info('翻译文章详情：第'.$ii.'条开始，翻译'.$length.'条');
            $ii = $this->updateTranslate($translate, $descDb, $ii, $length, ['content', 'keywords']);
            if($ii === false){
                break;
            }
        }*/

        // 翻译文章
        /*$newsDb = new News();
        for($ii = 0; $ii <= 1000000;){
            $this->info('翻译文章标题：第'.$ii.'条开始，翻译'.$length.'条');
            $ii = $this->updateTranslate($translate, $newsDb, $ii, $length, ['title', 'description']);
            if($ii === false){
                break;
            }
        }*/


        $this->comment('执行结束！！');
    }

    // 更新翻译数据
    protected function updateTranslate($translate, $infoDb, $ii, $length, $field)
    {
        $max   = 0;
        $lists = $this->getLists($infoDb, $ii, $length);
        if(empty($lists)){
            return false;
        }

        // 翻译 并保存
        foreach($lists as $item){
            $update = [];
            $max    = max($max, $item['id']);

            // 更新比执行翻译
            if(is_array($field)){
                foreach($field as $_field){
                    $has = '';
                    $no  = [];
                    if(!empty($item['cn_'.$_field])){
                        $has = 'cn';
                    } else{
                        $no[] = 'cn';
                    }
                    // 不要翻译繁体
                    /*if(!empty($item['tc_'.$_field])){
                        $has = 'tc';
                    } else{
                        $no[] = 'tc';
                    }*/
                    if(!empty($item['en_'.$_field])){
                        $has = 'en';
                    } else{
                        $no[] = 'en';
                    }
                    if(empty($no)){
                        continue;
                    }
                    if(empty($has)){
                        continue;
                    }
                    // 执行翻译
                    foreach($no as $_no){
                        $update[$_no.'_'.$_field] = $this->translate($translate, $item[$has.'_'.$_field], $_no);
                        if($update[$_no.'_'.$_field] === false){
                            break 2;
                        }
                    }
                }
            } else{
                $has = '';
                $no  = [];
                if(!empty($item['cn_'.$field])){
                    $has = 'cn';
                } else{
                    $no[] = 'cn';
                }
                // 不要翻译繁体
                /*if(!empty($item['tc_'.$field])){
                    $has = 'tc';
                } else{
                    $no[] = 'tc';
                }*/
                if(!empty($item['en_'.$field])){
                    $has = 'en';
                } else{
                    $no[] = 'en';
                }
                if(empty($no)){
                    continue;
                }
                if(empty($has)){
                    continue;
                }

                // 执行翻译
                foreach($no as $_no){
                    $update[$_no.'_'.$field] = $this->translate($translate, $item[$has.'_'.$field], $_no);
                    if($update[$_no.'_'.$field] === false){
                        break 2;
                    }
                }
            }

            // 是否有更新数据
            if(empty($update)){
                continue;
            }

            // 更新
            $infoDb->where('id', $item['id'])->update($update);
        }

        return $max;
    }

    // 执行翻译
    protected function translate($translate, $text, $lang)
    {
        $result = $translate->translateTo($text, $lang);
        if(!empty($result['error'])){
            var_dump($result['error']);

            return false;
        }

        return $result['text'] ?? '';
    }

    // 查询数据
    protected function getLists($model, $start = 0, $length = 1000)
    {
        $list = $model->where('id', '>', $start)->limit($length)->get()->toArray();

        return $list;
    }

}

